/**
 * Trabajo de Ingeniería de Software 2
 * Año 2008
 * Sistema de Reserva de Recursos.
 * Desarrolladores: - Marcelo Ferreira.
 *                  - Christian Gómez.
 *                  - Marcelo Rodas.
 */

package modelo;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Clase Entidad Usuario (JPA)
 * @author cgomez
 */
@Entity
@Table(name = "usuario")
@NamedQueries({@NamedQuery(name = "Usuario.findByIdUsuario", query = "SELECT u FROM Usuario u WHERE u.idUsuario = :idUsuario"), @NamedQuery(name = "Usuario.findByContrasenha", query = "SELECT u FROM Usuario u WHERE u.contrasenha = :contrasenha"), @NamedQuery(name = "Usuario.findByUserAudita", query = "SELECT u FROM Usuario u WHERE u.userAudita = :userAudita"), @NamedQuery(name = "Usuario.findByEstado", query = "SELECT u FROM Usuario u WHERE u.estado = :estado")})
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idUsuario", nullable = false)
    private String idUsuario;
    @Column(name = "contrasenha", nullable = false)
    private String contrasenha;
    @Column(name = "userAudita")
    private String userAudita;
    @Column(name = "estado")
    private Boolean estado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idSolicitante")
    private Collection<Solicitudreserva> solicitudreservaCollection;
    @JoinColumn(name = "iddatospersonales", referencedColumnName = "iddatospersonales")
    @ManyToOne
    private Datospersonales iddatospersonales;
    @JoinColumn(name = "idRol", referencedColumnName = "idRol")
    @ManyToOne
    private Rol idRol;

    /**
     * Crea una nueva instancia de Usuario
     */ 
    public Usuario() {
    }
    /**
     * Crea una nueva instancia de Usuario con valores especificos
     * @param idUsuario El idUsuario de Usuario
     */
    public Usuario(String idUsuario) {
        this.idUsuario = idUsuario;
    }
    /**
     * Crea una nueva instancia de Usuario con valores especificos
     * @param idUsuario El idUsuario de Usuarios
     * @param contrasenha El identificador contrasenha de Usuarios
     */
    public Usuario(String idUsuario, String contrasenha) {
        this.idUsuario = idUsuario;
        this.contrasenha = contrasenha;
    }
    /**
     * Obtiene el idUsuario de Usuario
     * @return El idUsuario de Usuario
     */
    public String getIdUsuario() {
        return idUsuario;
    }
    /**
     * Fija el identificador idUsuario de Usuario al valor especificado
     * @param idUsuario El identificador idUsuario de Usuario
     */
    public void setIdUsuario(String idUsuario) {
        this.idUsuario = idUsuario;
    }
    /**
     * Obtiene el contrasenha de Usuario
     * @return El contrasenha de Usuario
     */
    public String getContrasenha() {
        return contrasenha;
    }
    /**
     * Fija el identificador contrasenha de Usuario al valor especificado
     * @param contrasenha El identificador contrasenha de Usuario
     */
    public void setContrasenha(String contrasenha) {
        this.contrasenha = contrasenha;
    }
    
    /**
     * Obtiene un solicitudreservaCollection de Usuario
     * @return el solicitudreservaCollection de Usuario
     */
    public Collection<Solicitudreserva> getSolicitudreservaCollection() {
        return solicitudreservaCollection;
	}
    /**
     * Obtiene el userAudita de Usuario
     * @return El userAudita de Usuario
     */
    public String getUserAudita() {
        return userAudita;
    }
    /**
     * Fija el identificador userAudita de Usuario al valor especificado
     * @param userAudita El identificador userAudita de Usuario
     */
    public void setUserAudita(String userAudita) {
        this.userAudita = userAudita;
    }
    /**
     * Obtiene el estado de Usuario
     * @return El estado de Usuario
     */
    public Boolean getEstado() {
        return estado;
    }
    /**
     * Fija el identificador estado de Usuario al valor especificado
     * @param estado El identificador estado de Usuario
     */
    public void setEstado(Boolean estado) {
        this.estado = estado;
    }
    /**
     * Fija el solicitudreservaCollection de Usuario al valor especificado
     * @param solicitudreservaCollection El solicitudreservaCollection de Usuario
     */
    public void setSolicitudreservaCollection(Collection<Solicitudreserva> solicitudreservaCollection) {
        this.solicitudreservaCollection = solicitudreservaCollection;
    }
    /**
     * Obtiene el iddatospersonales de Usuario
     * @return El iddatospersonales de Usuario
     */
    public Datospersonales getIddatospersonales() {
        return iddatospersonales;
    }
    /**
     * Fija el identificador iddatospersonales de Usuario al valor especificado
     * @param iddatospersonales El identificador iddatospersonales de Usuario
     */
    public void setIddatospersonales(Datospersonales iddatospersonales) {
        this.iddatospersonales = iddatospersonales;
    }
    /**
     * Obtiene el idRol de Usuario
     * @return El idRol de Usuario
     */
    public Rol getIdRol() {
        return idRol;
    }
    /**
     * Fija el identificador idRol de Usuario al valor especificado
     * @param idRol El identificador idRol de Usuario
     */
    public void setIdRol(Rol idRol) {
        this.idRol = idRol;
    }
    /**
     * Retorna un valor de Hash para el objeto.
     * Esta implementacion evalua un valor hash basado sobre los campos id en este objeto
     * @return Un valor de hash para este objeto
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }
    /**
     * Determina si otro objeto es igual a Usuario. El resultado es
     * <code>true</code> si y solo si el argumento no es nulo y es un objeto Usuario
     * que tiene el mismo valor del campo id en este objeto.
     * @param object La referencia objeto con el cual comparar
     * @return <code>true</code> Si este objeto es la misma que su argumento;
     * <code>false</code> si no lo es.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }
    /**
     * Retorna una representacion String de este objeto.  Esta implementacion This implementation construye
     * la representacion basada en los campos.
     * @return Una representacion String del objeto.
     */
    @Override
    public String toString() {
        return this.iddatospersonales.getApellidos()+", "+this.getIddatospersonales().getNombres()+" -- ID: "+idUsuario;
    }



}
